/*
                             *******************
******************************* C SOURCE FILE *******************************
**                           *******************                           **
**                                                                         **
** project		: General Template                                         **
** filename		: HELLO.C                                                   **
** version		: 1.0                                                      **
** date			: December 31, 1986                                        **
**                                                                         **
*****************************************************************************
**                                                                         **
** Copyright (c) 2011, $pynarak                                            **
** All rights reserved.                                                    **
**                                                                         **
*****************************************************************************

VERSION HISTORY:
----------------

Version			: 1.0
Date 			: December 31, 1986
Revised by 		: $pynarak
Compiler        : GNU GCC
Description 	: Original version.
*/

#define _HELLO_C_SRC

/****************************************************************************/
/**                                                                        **/
/** MODULES USED                                                           **/
/**                                                                        **/
/****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

/****************************************************************************/
/**                                                                        **/
/** DEFINITIONS AND MACROS                                                 **/
/**                                                                        **/
/****************************************************************************/

#define NUM_THREADS		5

/****************************************************************************/
/**                                                                        **/
/** TYPEDEFS AND STRUCTURES                                                **/
/**                                                                        **/
/****************************************************************************/

struct thread_data
{
	int thread_id;
	int delay;
	char *message;
};

/****************************************************************************/
/**                                                                        **/
/** PROTOTYPES OF LOCAL FUNCTIONS                                          **/
/**                                                                        **/
/****************************************************************************/

void *PrintHello(void *thread_argv);

/****************************************************************************/
/**                                                                        **/
/** EXPORTED VARIABLES                                                     **/
/**                                                                        **/
/****************************************************************************/

/****************************************************************************/
/**                                                                        **/
/** GLOBAL VARIABLES                                                       **/
/**                                                                        **/
/****************************************************************************/

struct thread_data thread_data_array[NUM_THREADS] = {
	1,  1, "English: Hello World!",
	2,  2, "French: Bonjour, le monde!",
	3,  4, "Spanish: Hola al mundo!",
	4,  5, "Japan: Sekai e konnichiwa!",
	5, 10, "German: Guten Tag, Welt!"};

/****************************************************************************/
/**                                                                        **/
/** EXPORTED FUNCTIONS                                                     **/
/**                                                                        **/
/****************************************************************************/

/****************************************************************************/
/**                                                                        **/
/** LOCAL FUNCTIONS                                                        **/
/**                                                                        **/
/****************************************************************************/

int main (int argc, char *argv[])
{
	pthread_t threads[NUM_THREADS];
	int rc;
	int t;

	for(t = 0; t < NUM_THREADS; t++)
	{	
		rc = pthread_create(&threads[t], NULL, PrintHello, (void *)&thread_data_array[t]);
		if (rc)
		{
			printf("ERROR; return code from pthread_create() is %d\n", rc);
			exit(-1);
		}
	}
	pthread_exit(NULL);
	return 0;
}

void *PrintHello(void *thread_argv)
{
	struct thread_data *my_data;
	
	my_data = (struct thread_data *)thread_argv;
	while(1)
	{
		sleep(my_data->delay);
		printf("Thread: %d, Msg: %s.\r\n", my_data->thread_id, my_data->message);
	}
}

/****************************************************************************/
/**                                                                        **/
/** EOF                                                                    **/
/**                                                                        **/
/****************************************************************************/
